package com.lawyers.action;

import java.io.File;
import java.io.FileInputStream;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import com.lawyers.common.DocumentoVO;
import com.lawyers.common.UserVO;
import com.lawyers.database.DBAcciones;
import com.lawyers.database.DBLlenarCombos;
import com.lawyers.form.BajarArchivoForm;

public class BajarArchivoAction extends Action {

	private static Logger logger = Logger.getLogger(BajarArchivoAction.class);

	public ActionForward execute(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		BajarArchivoForm bajarArchivoForm = (BajarArchivoForm) form;
		String accion = bajarArchivoForm.getAccion();
		UserVO user = (UserVO) request.getSession().getAttribute("USUARIO");

		if (user == null)
			return mapping.findForward("login");

		if ("descargar".equalsIgnoreCase(accion)) {
			DocumentoVO doc = DBAcciones.getDocumento(bajarArchivoForm.getDocumento());
			Date hoy = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
			
			if(doc.getTipo().equalsIgnoreCase(".pdf")){
				String filename = doc.getNombre() + "_" + sdf.format(hoy) +doc.getTipo();
				response.setContentType("application/pdf");
				response.setHeader("Content-Disposition", "attachment;filename="+filename);
			}
			else if(doc.getTipo().equalsIgnoreCase(".doc") || doc.getTipo().equalsIgnoreCase(".docx")){
				String filename = doc.getNombre() + "_" + sdf.format(hoy) +doc.getTipo();
				response.setContentType("application/msword");
				response.setHeader("Content-Disposition", "attachment;filename="+filename);
				}
			else{
				String filename = doc.getNombre() + "_" + sdf.format(hoy) +doc.getTipo();
				response.setContentType("application/octet-stream");
				response.setHeader("Content-Disposition", "attachment;filename="+filename);
			}
			
			File file = new File(doc.getPath());
			FileInputStream fileIn = new FileInputStream(file);
			ServletOutputStream out = response.getOutputStream();

			byte[] outputByte = new byte[4096];
			while (fileIn.read(outputByte, 0, 4096) != -1) {
				out.write(outputByte, 0, 4096);
			}
			fileIn.close();
			out.flush();
			out.close();
			

		} else if ("filtrar".equalsIgnoreCase(accion)) {
			bajarArchivoForm.setListaDocumentos(DBAcciones.getListaDocumentos(bajarArchivoForm));

		}
			
		llenarCombos(bajarArchivoForm);
		return mapping.findForward("display");
	}

	private void llenarCombos(BajarArchivoForm bajarArchivoForm) {
		try {
			
			bajarArchivoForm.setLista132bis(DBLlenarCombos.getLista132_bis());
			bajarArchivoForm.setListaAccidentes(DBLlenarCombos.getListaAccidentes());
			bajarArchivoForm.setListaAcoso(DBLlenarCombos.getListaAcoso());
			bajarArchivoForm.setListaActividades(DBLlenarCombos.getListaActividades());
			bajarArchivoForm.setListaAcuerdoconc(DBLlenarCombos.getListaAcuerdoConc());
			bajarArchivoForm.setListaAgravado(DBLlenarCombos.getListaAgravado());
			bajarArchivoForm.setListaArt125323(DBLlenarCombos.getListaArt1());
			bajarArchivoForm.setListaAsignacionesfam(DBLlenarCombos.getListaAsignaciones());
			bajarArchivoForm.setListaBeneficio(DBLlenarCombos.getListaBeneficio());
			bajarArchivoForm.setListaCategorias(DBLlenarCombos.getListaCategorias());
			bajarArchivoForm.setListaCct(DBLlenarCombos.getListaCct());
			bajarArchivoForm.setListaConducta(DBLlenarCombos.getListaConductas());
			bajarArchivoForm.setListaContratacion(DBLlenarCombos.getListaContratacion());
			bajarArchivoForm.setListaContratacionjor(DBLlenarCombos.getListaContratacionJor());
			bajarArchivoForm.setListaContratacionpas(DBLlenarCombos.getListaContratacionPas());
			bajarArchivoForm.setListaDanio(DBLlenarCombos.getListaDanios());
			bajarArchivoForm.setListaDiferencia(DBLlenarCombos.getListaDiferencia());
			bajarArchivoForm.setListaDifsalarial(DBLlenarCombos.getListaDiferenciasSalariales());
			bajarArchivoForm.setListaHsExtra(DBLlenarCombos.getListaHsExtra());
			bajarArchivoForm.setListaInconstitucionalidad(DBLlenarCombos.getListaInconstitucionalidad());
			bajarArchivoForm.setListaIncorrecto(DBLlenarCombos.getListaIncorrecto());
			bajarArchivoForm.setListaIusvariandi(DBLlenarCombos.getListaIus());
			bajarArchivoForm.setListaLey24013(DBLlenarCombos.getListaLey24013());
			bajarArchivoForm.setListaMonotributo(DBLlenarCombos.getListaMonotributo());
			bajarArchivoForm.setListaProvincia(DBLlenarCombos.getListaProvincia());
			bajarArchivoForm.setListaProyectada(DBLlenarCombos.getListaProyectada());
			bajarArchivoForm.setListaRama(DBLlenarCombos.getListaRama());
			bajarArchivoForm.setListaSancion(DBLlenarCombos.getListaSanciones());
			bajarArchivoForm.setListaSolidaridad(DBLlenarCombos.getListaSolidaridad());
			bajarArchivoForm.setListaTipoDespido(DBLlenarCombos.getListaTiposDespido());
			bajarArchivoForm.setListaTransfondos(DBLlenarCombos.getListaTransFondos());
		
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			logger.info("ERROR AL LLENAR EL COMBO");
		}
	}

}
